#pragma once
#include "Defines.h"
#include "Player.h"
#include "Enemy.h"
#include "Spell.h"
#include "SpellStat.h"
#include "irrlicht.h"
#include "Input.h"
using namespace irr;
using namespace core;

#ifndef _PLAYER_H_
	class Player;
#endif

class Level
{
public:
	static int		level_number;
	static Level *	currentLevel;

	Player	jugador;
	Spell	spells[MAX_SPELLS];
	Enemy	actors[MAX_ACTORS];
	scene::ICameraSceneNode *	camera;
	bool	paused;
	
	bool load();
	void onUpdate();
	void onDraw();
	void onAction();
	void CheckCollisions();
	void Level::InitFPS();

private: // CAGATE!
	Level(void)
	{
		currentLevel = this;
		paused = true;
		// Si! Estoy cambiando valores estaticos desda la instancia!!!
		camera = 0;
		selector = 0;
		mapMesh = 0;
		mapNode = 0;
		collitionPlug = 0;
	};
	
	~Level(void){};

public: // REFERENCIAS ESTATICAS....para hacer las cosas un poco mas rapido

	static Level * initialize();
	// esta funcion descarga el mapa y todas las unidades que les fue cargado...esta mal llamada...
	// meter en donde corresponde...osea...cuando se termina el nivel o se presiona ESC
	static void finalize();

	static video::ITexture *			images;
	static scene::ISceneManager *		smgr;
	static scene::ITriangleSelector *	selector;
	static scene::ISceneNodeAnimator *	collitionPlug;
	static scene::IAnimatedMesh *		mapMesh;
	static scene::ISceneNode *			mapNode;

private:
	u32 last_call_time;
};
